﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Business.Entities;

namespace Data.DataBase
{
    public class AlumnoInscripAdapter : Data.Database.Adapter
    {
        private static List<Business.Entities.AlumnoInscripcion> _AlumnoInscripciones;

        public static List<Business.Entities.AlumnoInscripcion> AlumnoInscripciones
        {
            get 
            {
                if (_AlumnoInscripciones == null)
                {
                    _AlumnoInscripciones = new List<Business.Entities.AlumnoInscripcion>();
                    AlumnoInscripcion ai;
                    
                    ai = new AlumnoInscripcion();
                    ai.Id = 1;
                    ai.IdModulo = 1;
                    ai.IdAlumno = 1;
                    ai.Nota = 7;
                    ai.Condicion = "Regular";
                    ai.State = Business.Entities.BusinessEntity.States.Unmodified;

                    _AlumnoInscripciones.Add(ai);

                    ai = new AlumnoInscripcion();
                    ai.Id = 2;
                    ai.IdModulo = 1;
                    ai.IdAlumno = 1;
                    ai.Nota = 0;
                    ai.Condicion = "Cursa";
                    ai.State = Business.Entities.BusinessEntity.States.Unmodified;

                    _AlumnoInscripciones.Add(ai);
                    
                }
               return _AlumnoInscripciones;
            }
        }

        public void Delete(int id) 
        {
            this.Delete(this.GetOne(id));
        }
        public void Delete(AlumnoInscripcion alumnoinscrip)
        {
            AlumnoInscripciones.Remove(alumnoinscrip);
        }

        public Business.Entities.AlumnoInscripcion GetOne(int id)
        {
            return AlumnoInscripciones.Find(delegate(Business.Entities.AlumnoInscripcion ai) { return ai.Id == id; });
        }

        public List<Business.Entities.AlumnoInscripcion> GetAll()
        {
            return new List<AlumnoInscripcion>(AlumnoInscripciones);
        }

        public void Save(Business.Entities.AlumnoInscripcion alumInsc)
        {
            switch (alumInsc.State)
            {
                case BusinessEntity.States.New:
                    int nuevoId = 0;
                    // esta busqueda podria reemplazarse por un OrderBy que orden por ID.
                    foreach (AlumnoInscripcion ai in AlumnoInscripciones)
                    {
                        if (ai.Id > nuevoId)
                        {
                            nuevoId = ai.Id;
                        }
                    }
                    alumInsc.Id = nuevoId + 1;
                    AlumnoInscripciones.Add(alumInsc);
                    break;
                case BusinessEntity.States.Modified:
                    AlumnoInscripciones[AlumnoInscripciones.FindIndex(delegate(AlumnoInscripcion ai) { return ai.Id == alumInsc.Id; })] = alumInsc;
                    break;
                case BusinessEntity.States.Deleted:
                    this.Delete(alumInsc);
                    break;
            }
            alumInsc.State = BusinessEntity.States.Unmodified;

        }
    }
}
